Multi-faceted software applications generally offer a large number of users a variety of functionality and access to a large amount of data. Such applications typically service the clients using a single instance of the application and data. This structure is known as a “multi-tenancy” model, because a single instance of the application has multiple “tenants,” or clients. When a client accesses the application to retrieve, update, delete, or perform some other function to the data, this action is known as a “data request.”
A typical multi-tenant application consists of a three-tier architecture. The tiers include the presentation tier, the business processing tier, and the data management tier. As the functionality, data, and number of clients using the software application grow, the complexity of the tiers grows increasingly complex and unmanageable. The data management tier often becomes the most unmanageable as the system grows in clients, functionality, and number of data requests. Providing for the increase involves obtaining larger servers to house the data. Because multi-tenant applications only have a single instance of the data, this method is currently the only way to scale such an application. Increasing server size generally is inefficient and costly. Thus, conventional systems have drawbacks in terms of scalability. Scalability is desirable because it allows for an appropriate, balanced architecture to optimize storage and usage.
Conventional multi-tenancy systems also obtain data from a static data store. Typically, the location of the data is “hard-coded” into application configuration files, such that the data location is in a configuration support file that the program code reads. The location of the data can also be hard-coded into the application. Hard-coding can involve embedding the data location directly into the program code. Under these conventional methods, data relocation among different storage devices can require a system programmer to re-code to satisfy a data request. This conventional static method of locating data is inconvenient and inflexible. Although conventional methods exist for accessing data among multiple sources, those methods are not dynamic and are still “hard-coded” into the application. Thus, conventional methods are inefficient at storing and accessing data among multiple data stores.
Conventional methods also involve storing data according to the particular requesting entity, such as a client, in the same location. For example, all data for a particular client is stored on the same server. The result is that a particular client can not access data from multiple sources.
Accordingly, a need exists in the art for a scalable, configurable, data access methodology. In particular, a need exists in the art for a system and method for dynamically accessing and storing data in multiple locations based on business logic. Further, a need exists in the art for scalable architecture in the multi-tenant environment.